/**
 * gzip 压缩，主要的压缩方式 是 替换，重复率越高 压缩越有效果
 */

const zlib = require('zlib')
const fs = require('fs')
const path = require('path')

// zlib.createGzip
// zlib.gzip(fs.readFileSync(path.resolve(__dirname, 'test.txt')), function(err, data) {
//   fs.writeFileSync('test.txt.gzip', data)
// })

/**
 * 流
 * 可读流：this.push触发data on('data')  on('end')
 * 可写流： on('write') on('end')
 * 双工流： 能读能写
 * 转化流： 过滤器，两种状态 中间有个转化。 加密都算
 */

// 标准输入
// process.stdin.on('data', function(chunk) {
//   console.log(chunk)
//   // 标准输出
//   process.stdout.write(chunk)
// })

// process.stdin.pipe(process.stdout)

// 转化流
const { Transform } = require('stream')


/**
 * _write 可写流调用的方法   _read 可读流 调用方法
 * Duplex 能读能写 ， 读写无关，
 * 转化流 读写有关
 */

// 父类 调用子类 _方法
class MyTransform extends Transform {
  // 重写转化流中的 _transform
  // 转化流  中转 一下
  _transform(chunk, encoding, clearBuffer) { // 参数和可写流一样
    console.log(chunk)
    // 能写 能读   放到读中  push   写流 _write
    this.push(chunk.toString().toUpperCase())
    clearBuffer()
  }
}

let transform = new MyTransform()

// 读 -> （写   读） -> 写
process.stdin.pipe(transform).pipe(process.stdout)